package com.itcs.app.tran;

import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.alibaba.fastjson.JSON;
import com.itcs.app.message.NowPayResponseMsg;
import com.itcs.app.util.PayChnanelCode;
import com.itcs.app.util.PayResult;
import com.itcs.app.util.PayType;
import com.itcs.box.domain.BoxData;
import com.itcs.box.domain.BoxRequest;
import com.itcs.box.domain.BoxResponse;
import com.itcs.box.util.DateUtils;
import com.itcs.box.util.LogUtils;
import com.itcs.trading.mapper.TransJournalMapper;
import com.itcs.trading.model.TransJournal;

/**
 * @ClassName: Tran2008
 * @Description: 支付成功通知
 * @author CHEN-HF
 * @date 2017年12月22日 上午10:41:18
 * 
 */
@Component
public class Tran2008 {

	private Log logger = LogFactory.getLog(getClass());

	@Autowired
	private TransJournalMapper transJournalMapper;

	public String getTrancode() {
		return "2008";
	}

	public String getTranDescription() {
		return "支付成功通知";
	}

	public BoxResponse handle(BoxRequest boxRequest, Map<String, String> resultMap, String types, TransJournal trans) {

		LogUtils.LogInfo(getTranDescription(), getTrancode(), boxRequest.getData().getTransacSeq(),
				JSON.toJSONString(boxRequest), getClass());

		NowPayResponseMsg payrep = JSON.parseObject(JSON.toJSONString(resultMap), NowPayResponseMsg.class);

		BoxResponse responseInfo = new BoxResponse();
		BoxData data = boxRequest.getData();
		// 返回应答信息
		responseInfo.setKey(data.getDeviceId());
		responseInfo.setMessgeType(getTrancode()); // 支付成功通知交易
		BoxData responseData = new BoxData();
		responseData.setDeviceId(data.getDeviceId());
		responseData.setTransacSeq(data.getTransacSeq());
		// 支付类型（参见“数据字典表”）
		responseData.setPayType(PayType.二维码);
		// 第三方支付平台代码（参见“数据字典表”）
		if (types.equals("13")) { // 微信
			responseData.setPayChannelCode(PayChnanelCode.微信支付);
			trans.setPayerId((Integer.parseInt(PayChnanelCode.微信支付))); // 支付方代号
		} else if (types.equals("12")) { // 微信 {
			responseData.setPayChannelCode(PayChnanelCode.支付宝支付);
			trans.setPayerId((Integer.parseInt(PayChnanelCode.支付宝支付)));// 支付方代号
		}
		// 支付结果：1:成功；-1：欠费；-2其他
		if (payrep.getResponseCode().equals("A001")) { // 现在支付成功标识
			responseData.setPayresult(PayResult.成功);
			trans.setPayState(2);
		} else {
			responseData.setPayresult(PayResult.其他);
			trans.setPayState(3);
		}

		// 应答时间
		responseData.setReplyTime(DateUtils.getUnixTimeStamp());

		trans.setPayTime(DateUtils.getParseDate(payrep.getPayTime())); // 支付时间
		// trans.setInvoiceState((byte) data.getInvoice()); // 是否开票
		trans.setsOrderNo(payrep.getMhtOrderNo()); // 聚合支付订单号
		trans.setdOrderNo(payrep.getChannelOrderNo()); // 第三方支付单号
		// 支付类型TODO 数据库没有该字段

		transJournalMapper.updateByPrimaryKey(trans);
		responseData.setInvoice(String.valueOf(1)); // 未打印
		responseInfo.setData(responseData);

		LogUtils.LogInfo(getTranDescription(), getTrancode(), responseData.getTransacSeq(),
				JSON.toJSONString(responseInfo), getClass());

		return responseInfo;
	}
}
